package com.ruoyi.system.service.impl;

import java.util.List;
import com.ruoyi.common.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.NoteCommentMapper;
import com.ruoyi.system.domain.NoteComment;
import com.ruoyi.system.service.INoteCommentService;

/**
 * 笔记评论记录Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-01-01
 */
@Service
public class NoteCommentServiceImpl implements INoteCommentService 
{
    @Autowired
    private NoteCommentMapper noteCommentMapper;

    /**
     * 查询笔记评论记录
     * 
     * @param commentId 笔记评论记录主键
     * @return 笔记评论记录
     */
    @Override
    public NoteComment selectNoteCommentByCommentId(Long commentId)
    {
        return noteCommentMapper.selectNoteCommentByCommentId(commentId);
    }

    /**
     * 查询笔记评论记录列表
     * 
     * @param noteComment 笔记评论记录
     * @return 笔记评论记录
     */
    @Override
    public List<NoteComment> selectNoteCommentList(NoteComment noteComment)
    {
        return noteCommentMapper.selectNoteCommentList(noteComment);
    }

    /**
     * 新增笔记评论记录
     * 
     * @param noteComment 笔记评论记录
     * @return 结果
     */
    @Override
    public int insertNoteComment(NoteComment noteComment)
    {
        noteComment.setCreateTime(DateUtils.getNowDate());
        return noteCommentMapper.insertNoteComment(noteComment);
    }

    /**
     * 修改笔记评论记录
     * 
     * @param noteComment 笔记评论记录
     * @return 结果
     */
    @Override
    public int updateNoteComment(NoteComment noteComment)
    {
        noteComment.setUpdateTime(DateUtils.getNowDate());
        return noteCommentMapper.updateNoteComment(noteComment);
    }

    /**
     * 批量删除笔记评论记录
     * 
     * @param commentIds 需要删除的笔记评论记录主键
     * @return 结果
     */
    @Override
    public int deleteNoteCommentByCommentIds(Long[] commentIds)
    {
        return noteCommentMapper.deleteNoteCommentByCommentIds(commentIds);
    }

    /**
     * 删除笔记评论记录信息
     * 
     * @param commentId 笔记评论记录主键
     * @return 结果
     */
    @Override
    public int deleteNoteCommentByCommentId(Long commentId)
    {
        return noteCommentMapper.deleteNoteCommentByCommentId(commentId);
    }

    /**
     * 查询笔记的评论列表（包含子评论）
     * 
     * @param noteType 笔记类型
     * @param noteId 笔记ID
     * @return 评论列表
     */
    @Override
    public List<NoteComment> selectCommentsByNote(String noteType, Long noteId)
    {
        List<NoteComment> topComments = noteCommentMapper.selectTopCommentsByNote(noteType, noteId);
        
        // 为每个顶级评论加载子评论
        for (NoteComment comment : topComments) {
            List<NoteComment> children = noteCommentMapper.selectChildComments(comment.getCommentId());
            comment.setChildren(children);
        }
        
        return topComments;
    }

    /**
     * 查询笔记的顶级评论列表
     * 
     * @param noteType 笔记类型
     * @param noteId 笔记ID
     * @return 顶级评论列表
     */
    @Override
    public List<NoteComment> selectTopCommentsByNote(String noteType, Long noteId)
    {
        return noteCommentMapper.selectTopCommentsByNote(noteType, noteId);
    }

    /**
     * 查询评论的子评论列表
     * 
     * @param parentId 父评论ID
     * @return 子评论列表
     */
    @Override
    public List<NoteComment> selectChildComments(Long parentId)
    {
        return noteCommentMapper.selectChildComments(parentId);
    }

    /**
     * 查询用户的评论列表
     * 
     * @param userId 用户ID
     * @return 评论列表
     */
    @Override
    public List<NoteComment> selectUserComments(Long userId)
    {
        return noteCommentMapper.selectUserComments(userId);
    }

    /**
     * 统计笔记评论数
     * 
     * @param noteType 笔记类型
     * @param noteId 笔记ID
     * @return 评论数
     */
    @Override
    public int countCommentsByNote(String noteType, Long noteId)
    {
        return noteCommentMapper.countCommentsByNote(noteType, noteId);
    }

    /**
     * 增加评论点赞数
     * 
     * @param commentId 评论ID
     * @return 结果
     */
    @Override
    public int incrementCommentLike(Long commentId)
    {
        return noteCommentMapper.incrementCommentLike(commentId);
    }

    /**
     * 减少评论点赞数
     * 
     * @param commentId 评论ID
     * @return 结果
     */
    @Override
    public int decrementCommentLike(Long commentId)
    {
        return noteCommentMapper.decrementCommentLike(commentId);
    }
}